package com.example.designpattern.behavioral.strategy.factory;

import com.example.designpattern.behavioral.strategy.strategy.ISort;

/**
 * 环境类
 */
public class Sort implements ISort {

    private ISort sort;

    private StrategyFactory factory;

    /**
     * 采用了工厂模式优化了一下策略的创建，但是用户依旧需要自己选择策略
     *
     * @param strategy
     */
    public Sort(SortStrategy strategy) {
        factory = new StrategyFactory();
        setStrategy(strategy);
    }

    @Override
    public void sort(int[] arr) {
        sort.sort(arr);
    }

    // 依然由客户端指定策略
    // 客户端通过此方法设置不同的策略
    public void setStrategy(SortStrategy strategy) {
        // 环境类自身同时作为工厂类
//        switch (strategy) {
//            case BUBBLE_SORT:
//                sort = new BubbleSort();
//                break;
//            case SELECTION_SORT:
//                sort = new SelectionSort();
//                break;
//            case INSERT_SORT:
//                sort = new InsertSort();
//                break;
//            default:
//                throw new IllegalArgumentException("There's no such strategy yet.");
//        }
        // 环境类自身同时不作为工厂类，调用工厂类
        sort = factory.createStrategy(strategy);
    }
}
